home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)zk.d64
/
txt.ffloat
< prev
next >
Wrap
Text File
|
2007-03-01
|
3KB
|
130 lines
╞╧╥═┴╘╘┼─ ╞╠╧┴╘╔╬╟ ╨╧╔╬╘
BY ─ICK ╦LINGENS
─UTCH ├╧═┴╠ ╒SERS ╟ROUP
┴FTER READING THE ╤LINK SECTION IN
├╧═┴╠ ╘╧─┴┘ #15, ESPECIALLY THE ITEMS
ON ╨╥╔╬╘ ╒╙╔╬╟, ╔ DEVELOPED A
FUNCTION THAT PRINTS A NUMBER IN A
FLOATING POINT FORMAT. ╘HE FUNCTION
RETURNS THE NUMBER IN A STRING USING
THE SCIENTIFIC NUMBER NOTATION, SUCH
AS
1.23456789E-10
BUT THE NUMBER OF DECIMAL PLACES CAN
BE SET IN THE FUNCTION CALL.
╘HE FUNCTION FIRST ISOLATES THE
INTEGER PART (THE MOST SIGNIFICANT
DIGIT) TOGETHER WITH THE MANTISSA AND
AFTER THAT THE EXPONENT OF THE
NUMBER.
╘HE MANTISSA IS ROUNDED WITH THE
WANTED NUMBER OF DECIMAL PLACES AND
ASSIGNED TO A STRING WHICH IS
EXTENDED WITH THE EXPONENT.
╚ERE FOLLOWS THE FUNCTION:
╞╒╬├ FFLOAT$(NUMBER,N) ├╠╧╙┼─
MAXDEC:=8 // SEE ╬OTE 1
╔╞ N<1 ╧╥ N>MAXDEC ╘╚┼╬
╥┼╨╧╥╘ 1 // ┴RGUMENT ERROR
┼╬─╔╞
//
─╔═ F$ ╧╞ 1+1+1+N+1+3
//
// 1 : SIGN (OR SPACE)
// 1 : INTEGER PART
// 1 : DECIMAL POINT
// N : DECIMAL PART
// 1 : 'E'
// 3 : SIGNED EXPONENT
//
SIGNUM:=╙╟╬(NUMBER)
NUMBER:=┴┬╙(NUMBER)
╔╞ NUMBER>0 ╘╚┼╬
EXPON:=╔╬╘(╠╧╟(NUMBER)/╠╧╟(10))
┼╠╙┼
EXPON:=0
┼╬─╔╞
NUMBER:=NUMBER/(10XPON)
SIGEX:=╙╟╬(EXPON)
EXPON:=┴┬╙(EXPON)
FACT:=10
// ╥OUNDING NOW:
NUMBER:=╔╬╘(NUMBER*FACT+.5)/FACT
F$:=╙╘╥$(NUMBER)
// ╙EE ╬OTE 2
╔╞ ╬╧╘ "." ╔╬ F$ ╘╚┼╬ F$:=F$+"."
╔╞ SIGNUM=-1 ╘╚┼╬ // ╙EE ╬OTE 3
F$:="-"+F$
┼╠╙┼
F$:=" "+F$
┼╬─╔╞
╫╚╔╠┼ ╠┼╬(F$)<3+N ─╧ // ╙EE ╬OTE 4
F$:=F$+"0"
┼╬─╫╚╔╠┼
F$:=F$+"E"
╔╞ SIGEX=-1 ╘╚┼╬ // ╙EE ╬OTE 5
F$:=F$+"-"
┼╠╙┼
F$:=F$+"+"
┼╬─╔╞
// ╙EE ╬OTE 6
F$:=F$+╙╘╥$(100+EXPON)(2:3)
╥┼╘╒╥╬ F$
┼╬─╞╒╬├ FFLOAT$
╙OME ADDITIONAL NOTES.
1. ╘HE NUMBER OF DECIMALS (N IN THE
FUNCTION HEADER) IS LIMITED UP TO
8 BECAUSE OF INTERNAL
SIGNIFICANCE.
2. ╙OME NUMBERS EVALUATE INTO A
FLOATING POINT NUMBER WITHOUT A
DECIMAL POINT. ┼XAMPLE:
N:=1999999999
╨╥╔╬╘ N
WITH OUTPUT
2E+10
┴FTER ASSIGNING THE NUMBER TO THE
STRING A TEST IS DONE ON THAT
DECIMAL POINT. ╔F THERE IS NOT, IT
IS ADDED TO THE STRING.
3. ╔F THE NUMBER IS NEGATIVE A
LEADING MINUS IS PRINTED; IF NOT A
SPACE.
4. ╔F NECESSARY THE DECIMAL PART IS
EXTENDED WITH ZERO'S UPTO THE
WANTED NUMBER OF DECIMALS.
5. ╘HE EXPONENT ALWAYS STARTS WITH
ITS SIGN (+ OR -).
6. ╘HE EXPONENT FORMAT IS ACHIEVED IN
A SPECIAL WAY:
FIRST ADDING 100 TO THE EXPONENT'S
VALUE AND THEN USING ONLY THE
SECOND AND THIRD CHARACTER. ╙O IF
NECESARY THERE IS ALWAYS A LEADING
ZERO. ╙UCH AS:
EXPONENT$=╙╘╥$(100+EXPON)(2:3)
MAKING USE OF THE SPECIAL 2.0
STRING HANDLING FACILITIES.